package cn.tedu.thread;
/*本类用于多线程编程实现方案2:实现Runnable接口来完成*/
public class TestThread2 {
    public static void main(String[] args) {
        //4.创建自定义类对象--目标业务类对象
        MyRunnable target = new MyRunnable();
        //5.创建多个线程对象 //为了实现自定义类对象的线程对象,和Thread线程类建立关系!! 才能通过线程类start()方法将线程对象转为就绪队列Runnable //Thread t1 = new Thread(target);
        /*如何以多线程的方式启动线程?需要调用start()
         * 自己没有,需要与Thread类建立联系:Thread(Runnable target)
         * 但是由于Runnable是接口,无法实例化,我们可以把接口实现类对象
         * 也就是我们的自定义类的对象作为构造函数的参数传入,与Thread类建立关系 */ //learning new, so many API if there is no 基础底层研究
        Thread t1 = new Thread(target);
        Thread t2 = new Thread(target);
        Thread t3 = new Thread(target);
        Thread t4 = new Thread(target);
        t1.start(); //通过多线程对象t1,调用Thread的多线程抢占方法start(),,,
        // start()方法,1)一部分是过度可运行状态和运行状态;2)一部分是调用自定义的MyRunnable方法
        // 3)start()方法是线程类Thread的,调用的run()是自定义类的,所以run()方法需要再次使用Thread类static和功能获取当前线程对象和名字,除非第一种情况,自定义类继承了线程类,就不用写线程类Thread.static方法和线程类方法,的链式加载
        t2.start();//start()实现,底层分配: 1)一部分是线程类的,2)一部分是自定义类的
        t3.start();
        t4.start();
       t1.run(); //!!!!!!1)继承Thread的run方法,但是返回的还是没有继承Thread类的业务类的run方法, 当前线程是回到非Thread父类继承的业务类的都是main线程//通过实现R8unnable接口的自定义类对象,在测试类main线程调用 //如果自定义类没有继承线程类Thread,自己方法的线程就是main()
      /*t2.run();
        t3.run();
        t4.run();*/
    }
}
//1.自定义多线程类
class MyRunnable implements Runnable{

    public MyRunnable() {             //实现接口类没有父辈的线程类Thread的修改线程名字构造方法
    }

    //2.添加接口中未实现的抽象方法,用于完成业务
    @Override
    public void run() {
        //3.写业务:打印10次当前正在执行的线程名称
        for (int i = 0; i < 10; i++) {
            /*问题:自定义类与父接口Runnable中都没有获取线程名字的方法
            所以还需要从Thread类中找:
            currentThread():静态方法,获取当前正在执行的线程对象
            getName():非静态方法,由刚刚获取到的线程对象调用,返回当前线程对象的名字
            * */
            System.out.println("MyRunnable的run()");
            System.out.println(i+"="+Thread.currentThread().getName()); //1)静态方法直接调用静态方法获取当前正在执行的线程类对象,Thread.currentThread() //1)通过Thread类,引入调用Thread类的线程对象;2)然后通过Thread类对象调用
        }
    }
}